// 导入接口
import { getUserInfoAPI, loginAPI, getStaffAPI } from '@/api/user.js'

// 导入操作cookie的方法
import { setToken, getToken, removeToken } from '@/utils/auth.js'

export default {
  namespaced: true, // 开启局部命名空间
  state: {
    token: getToken() || '', // 如果本地有token数据就调用本地的
    userInfo: {} // 当前登录用户的信息
  },
  mutations: {
    // 保存token
    setToken(state, payload) {
      // token要保存在cookie和vuex中
      setToken(payload) // cookie
      state.token = payload // vuex
    },
    // 删除token
    delToken(state) {
      removeToken() // 删除cookie中的token
      state.token = '' // 删除vuex中的token
    },
    // 给userInfo赋值
    setUserInfo(state, payload) {
      state.userInfo = payload
    },
    // 清除userInfo的数据
    removeUserInfo(state) {
      state.userInfo = {}
    }
  },
  actions: {
    // 请求服务器的登录接口，得到登陆成功后的token
    async getToken(context, payload) {
      try {
        // 发起网络请求
        const res = await loginAPI(payload)
        // 保存token
        // context.commit('setToken', res.data.data) // 当响应拦截的数据改变了，这里的数据也应该跟着改变
        context.commit('setToken', res.data)
      } catch (error) {
        return Promise.reject(error)
      }
    },
    // 请求服务器接口，得到当前的用户信息
    async getUserInfo(context, payload) {
      const res = await getUserInfoAPI()
      // console.log(res)
      // 得到用户信息
      const baseRes = res.data
      // 得到员工基本信息
      const res2 = await getStaffAPI(baseRes.userId)
      const staff = res2.data

      // 将得到的两个对象合并
      const newRes = { ...baseRes, ...staff }
      // 保存用户信息
      context.commit('setUserInfo', newRes)

      // 注意点：这里我将 newRes 返回出来（现在这个玩意用不上，这是为后面埋下的伏笔）
      return newRes
    }
  }
}
